<?php

include_once 'constants.php';
include_once 'db.php';
include_once 'crud.php';
include_once 'simpleimage.php';

/**
 * Clase para el manejo de usuarios
 *
 * @author anyul
 * @version 2.0
 */
class usuario extends db implements crud {

    public $nombre = '';
    public $apellido = '';
    public $login;
    private $imagen = null;

    /**
     * Registra un nuevo usuario en la base de datos
     * @param mixed $data arreglo de valores de usuario
     * @param mixed $imagen las imagenes a cargar
     * @return mixed 
     */
    public function registrar($data) {
        $imagen = $data['imagen'];
        unset($data['imagen']);
        $this->imagen = new SimpleImage();
        $data['rol'] = 1; //usuario comun
        $data['status'] = 1; //activo
        $resultado = $this->insert('usuario', $data);
        foreach ($imagen as $indice => $imagen) {
            if ($imagen['error'] == 0) {
                $nombre_imagen = "usuario-" . $resultado['insert_id'] . ".jpg";
                $exito_imagen = move_uploaded_file($imagen['tmp_name'], '../images/usuarios/' . $nombre_imagen);
                if ($exito_imagen) {
                    $archivo = '../images/usuarios/' . $nombre_imagen;
                    $this->imagen->load($archivo);
                    $this->imagen->resize(200, 150);
                    $this->imagen->save($archivo);
                }
            $insert_image = $this->update("usuario", array("foto" => $nombre_imagen), array("id" => $resultado['insert_id']));
            }
        }
        if ($resultado['suceed'] == 'true') {
            $this->enviar_correo_registro($data['email'], $data['nombre'], $data['apellido'], $data['login'], $data['password']);
            return TRUE;
        } else {
            return FALSE;
        }
    }

    public function editar($params, $condicion) {
        $this->imagen = new SimpleImage();
        $imagen = $params['imagen'];
        unset($params['imagen']);
        $result = $this->update('usuario', $params, $condicion);
        foreach ($imagen as $indice => $imagen) {
            if ($imagen['error'] == 0) {
                $nombre_imagen = "usuario-" . $params['id'] . ".jpg";
                $exito_imagen = move_uploaded_file($imagen['tmp_name'], '../images/usuarios/' . $nombre_imagen);
                if ($exito_imagen) {
                    $archivo = '../images/usuarios/' . $nombre_imagen;
                    $this->imagen->load($archivo);
                    $this->imagen->resize(200, 150);
                    $this->imagen->save($archivo);
                }
            }
        }
        if (isset($nombre_imagen)) {
            $insert_image = $this->update("usuario", array("foto" => $nombre_imagen), array("id" => $params['id']));
        }
        if ($result['suceed'] == 'true') {
            return true;
        } else {
            return false;
        }
    }

    public function borrar($id) {
        $usuario = $this->ver($id);
        $foto = "";
        if (count($usuario) > 0) {
            $foto = SERVER_ROOT . IMAGES_USUARIOS . $usuario[0]['foto'];
        }
        $result = $this->delete('usuario', array("id" => $id));
        if ($result['suceed'] == 'true') {
            if ($foto != "") {
                unlink($foto);
            }
            return TRUE;
        } else {
            return FALSE;
        }
    }

    /**
     * funcion que retorna una matriz de datos de un usuario determinado
     * @param int $id id del usuario
     * @return array arreglo de datos
     */
    public function ver($id) {
        $result = $this->select('*', 'usuario', array('id' => $id));
        if ($result['suceed'] == 'true') {
            return $result['data'][0];
        } else {
            return array('data' => array('nombre' => 'n/a'));
        }
    }

    /**
     * funcion que retorna un arreglo de usuarios
     * @return Array
     */
    public function listarUsuarios() {
        $usuarios = $this->select('*', 'usuarios');
        if ($usuarios['suceed'] == 'true') {
            return $usuarios['data'];
        } else {
            return array('data' => array('nombre' => 'n/a'));
        }
    }

    /**
     * Iniciar sesión de usuario
     * @param String $usuario nombre del usuario
     * @param String $password contraseña del usuario
     * @return Boolean booleano que indica si el usuario fue encontrado y está activo.
     */
    public function login($usuario, $password) {
        try {
            $result = $this->select('*', 'usuario', array(
                        'login' => $usuario,
                        'password' => $password,
                        'status' => 1));
            if ($result['suceed'] == true && count($result['data']) > 0) {
                $_SESSION['usuario'] = $result['data'][0];
                $_SESSION['status'] = 'logueado';
                header("location:" . ROOT . "/usuarios/");
                return $result['suceed'];
            } else {
                return false;
            }
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function confirmar_miembro() {
        if ((isset($_SESSION['status']) && $_SESSION['status'] != 'logueado') | !isset($_SESSION['usuario'])){
            session_destroy();
            header("location: " . ROOT . "/usuarios/login.php");
        }
    }

    public function log_Out() {
        if (isset($_SESSION['status'])) {
            unset($_SESSION['status']);

            if (isset($_COOKIE[session_name()]))
                setcookie(session_name(), '', time() - 1000);
            session_destroy();
            header("location: " . ROOT . "/usuarios/login.php");
        }
    }

    public function recuperar_clave($email) {
        $usuario = $this->dame_query("select nombre, apellido, login, email, password from usuario where email='" . $email . "'");
        if (count($usuario['data']) > 0) {
            $usuario = $usuario['data'][0];
            // <editor-fold defaultstate="collapsed" desc="encabezado">
            $headers = 'MIME-Version: 1.0' . "\r\n";
            $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
            $headers .= 'From: CCI Venezuela <info@ccivenezuela.com>' . "\r\n";
// </editor-fold>
            // <editor-fold defaultstate="collapsed" desc="Mensaje">
            $mensaje = <<<EOF
            <p>Estimado/a <b>{$usuario['nombre']} {$usuario['apellido']}</b> <br/>
                A continuación enviamos por solicitud suya los datos de su cuenta:\n</p>
                <p><b>Login:</b>{$usuario['login']}</p> 
                <p><b>Password:</b> {$usuario['password']}</p>
                    
            <p><a href="http://www.ccivenezuela.com">CCIVenezuela.com</a></p>
                
EOF;
// </editor-fold>

            $resultado = mail($usuario['email'], "Reenvío de Contraseña", $mensaje, $headers);
            if (!$resultado) {
                $resultado = Array("exito" => false, "mensaje" => "No se pudo enviar un correo a la dirección registrada.");
            }
        } else {
            $resultado = Array("exito" => false, "mensaje" => "No existe un usuario registrado con el correo ingresado.");
        }
        return array("exito" => true, "mensaje" => "contraseña enviada con éxito");
    }

    /**
     * envia un correo al usuario registrado
     * @param type $email correo del usuario
     * @return boolean resultado de la operacion
     */
    public function enviar_correo_registro($email, $nombre, $apellido, $login, $clave) {
        $exito = false;
        $url = ROOT;
        $url_imagen = ROOT . IMAGES;
        // <editor-fold defaultstate="collapsed" desc="encabezado">
        $headers = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
        $headers .= 'From: CCI Venezuela <info@ccivenezuela.com>' . "\r\n";
// </editor-fold>
        $message = <<<MENSAJE
        <a href="{$url}" target="_blank"><img src="{$url_imagen}logo.gif" style="float:left; margin:5px; height:100px;"/></a>
        <p>Estimado/a {$nombre} {$apellido}:</p>
        <p>Bienvenido a su club, el Club del Corredor Inmobiliario...</p> 
        <p>Te recomendamos guardar los datos de tu cuenta.</p>
 
        <p><b>Nombre de usuario:</b> <span>{$login}</span>
        <p><b>Contraseña:</b> <span>{$clave}</span>
 
        <p><b>Nota:</b> Recuerda que estos datos son instransferibles y es 
responsabilidad de cada corredor el uso adecuado de los mismos.</p>
MENSAJE;

        $exito = mail($email, "Bienvenido a CCI venezuela", $message, $headers);
        return $exito;
    }

}

?>
